方法一:转成数组
javascript
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var isPalindrome = function (head) {
let valArr = []
while (head) {
valArr.push(head.val)
head = head.next
}
for (let i = 0, j = valArr.length - 1; i < j; i++, j--) {
if (valArr[i] !== valArr[j]) {
return false
}
}
return true
}
方法二:快慢指针
javascript
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var isPalindrome = function (head) {
if (head == null || head.next == null) {
return true
}
let fast = head
let slow = head
let prev
while (fast && fast.next) {
prev = slow
slow = slow.next
fast = fast.next.next
}
prev.next = null // 断成两个链表
// 翻转后半段
let head2 = null
while (slow) {
const tmp = slow.next
slow.next = head2
head2 = slow
slow = tmp
}
// 比对
while (head && head2) {
if (head.val != head2.val) {
return false
}
head = head.next
head2 = head2.next
}
return true
}